package com.power.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import lombok.extern.slf4j.Slf4j;

@Component
@Slf4j
public class SpringContextUtil implements ApplicationContextAware {

	/**
	   * 上下文对象实例
	   */
	  private static ApplicationContext applicationContext;
	 
	  @Override
	  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		  log.info("上下文对象实例初始化");
	    SpringContextUtil.applicationContext = applicationContext;
	  }
	 
	  /**
	   * 获取applicationContext
	   *
	   * @return
	   */
	  public static ApplicationContext getApplicationContext() {
	    return applicationContext;
	  }
	 
	  /**
	   * 通过name获取 Bean.
	   *
	   * @param name
	   * @return
	   */
	  public static Object getBean(String name) {
	    return getApplicationContext().getBean(name);
	  }
	 
	  /**
	   * 通过class获取Bean.
	   *
	   * @param clazz
	   * @param <T>
	   * @return
	   */
	  public static <T> T getBean(Class<T> clazz) {
	    return getApplicationContext().getBean(clazz);
	  }
	 
	  /**
	   * 通过name,以及Clazz返回指定的Bean
	   *
	   * @param name
	   * @param clazz
	   * @param <T>
	   * @return
	   */
	  public static <T> T getBean(String name, Class<T> clazz) {
	    return getApplicationContext().getBean(name, clazz);
	  }
}
